/**
 * @description 创建一个会缓存 func 结果的函数 func 在调用时 this 会绑定在缓存函数上。
 * @param {Function} func 需要缓存化的函数
 * @returns {Function} 返回缓存化后的函数
 */
function memoize(func, resolver) {
    // 缓存是否存在
    const key = resolver ? resolver.apply(this, args) : args[0];
    if (memoized.cache.has(key)) {
        return memoized.cache.get(key);
    }
    const memoized = function (...args) {
        const result = func.apply(this, args);
        memoized.cache.set(key, result);
        return result;
    };
    memoized.cache = new WeakMap();
    return memoized;
}